package main;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

/**
 * Klasa panelu przeciwnika
 * @author Maciej Krawczyk
 */
@SuppressWarnings("serial")
public class OpponentPanel extends JPanel implements PropertyChangeListener {

	/**Etykieta wyswietla numer przeciwnika*/
	private final JLabel idPlayer;
	/**Etykieta wyswietla role przeciwnika*/
	private JLabel blindLabel; 
	/**Etykieta wyswietla stawke przeciwnika*/
	private JLabel stakeLabel;
	/**Etykieta wyswietla liczbe zetonow gracza*/
	private JLabel chipsLabel;
	/**Etykieta wyswietla status przeciwnika*/
	private JLabel stateLabel;
	/**Czcionka*/
	private Font font;
	/**Modyfikator zarzadcy rozkladu*/
	private GridBagConstraints c;
	
	/**
	 * Konstruktor panelu przeciwnika
	 * @param id numer indentyfikacyjny przeciwnika
	 */
	public OpponentPanel(int id) {
		this.setLayout(new GridBagLayout());
		this.setBackground(new Color(21, 134, 183));
		this.setOpaque(true);
		font = new Font(Font.SERIF, Font.PLAIN, 23);
		c = new GridBagConstraints();
		c.insets = new Insets(15, 5, 5, 5);
		
		idPlayer = new JLabel("Player " + id);
		idPlayer.setFont(font);
		idPlayer.setHorizontalAlignment(SwingConstants.CENTER);
		c.fill = GridBagConstraints.BOTH;
		c.gridx = 0;
		c.gridy = 0;
		c.gridwidth = 2;
		this.add(idPlayer, c);
			
		stakeLabel = new JLabel("Stake: 0");
		stakeLabel.setFont(font);
		c.insets = new Insets(0, 5, 5, 5);
		c.gridx = 0;
		c.gridy = 1;
		c.gridwidth = 1;
		stakeLabel.setBackground(new Color(206, 26, 44));
		stakeLabel.setOpaque(true);
		this.add(stakeLabel, c);
		
		
		blindLabel = new JLabel("");
		blindLabel.setFont(font);
		c.gridx = 1;
		c.gridwidth = 1;
		this.add(blindLabel, c);
		
		chipsLabel = new JLabel("Chips: 0");
		chipsLabel.setFont(font);
		c.anchor = GridBagConstraints.CENTER;
		c.gridx = 0;
		c.gridy = 2;
		c.gridwidth = 2;
		this.add(chipsLabel, c);
		
		stateLabel = new JLabel("State: Waiting");
		stateLabel.setFont(font);
		c.insets = new Insets(0, 5, 15, 5);
		c.gridx = 0;
		c.gridy = 3;
		c.gridwidth = 2;
		c.gridwidth = 2;
		this.add(stateLabel, c);
				
	}

	/**
	 * Metoda synchronizuje informacje pomiedzy klasa danych i GUI
	 * @see java.beans.PropertyChangeEvent
	 */
	@Override
	public void propertyChange(PropertyChangeEvent evt) {
		switch (evt.getPropertyName()) {
		case "setBlind":
			setBlind(evt.getNewValue().toString());
			break;
		case "setChips":
			setChips((int) evt.getNewValue());
			break;
		case "setStake":
			setStake((int) evt.getNewValue());
			break;
		default:
			System.out.println("Nieznana komenda przeciwnika");
			break;
		}	
	}

	/**
	 * Metoda ustawia zetony przeciwnika
	 * @param chips liczba zetonow
	 */
	public void setChips(int chips) {
		chipsLabel.setText("Chips: " + chips);
		
	}
	
	/**
	 * Mutator ustawiajacy role przeciwnika 
	 * @param blind rola przeciwnika
	 */
	public void setBlind(String blind) {
		blindLabel.setText(blind);
	}
	
	/**
	 * Mutator ustawiajacy status przeciwnika
	 * @param state status przeciwnika
	 */
	public void setState(String state) {
		stateLabel.setText("State: " + state);
	}
	
	/**
	 * Mutator ustawiajacy stawke przeciwnika
	 * @param s wysokosc stawki
	 */
	public void setStake(int s) {
		stakeLabel.setText("Stake: " + s);
	}
	
	/**Metoda odpowiedzialna za "Check" przeciwnika*/
	public void opCheck() {
		
	}
	
	/**Metoda podswietla panel przeciwnika, ktory akutalnie wykonuje ruch*/
	public void highlightOp() {
		stakeLabel.setBackground(new Color(21, 126, 16));
	}
	
	/**Metoda "gasi" panel przeciwnika, ktory wykonal ruch*/
	public void putOffOp() {
		stakeLabel.setBackground(new Color(206, 26, 44));
	}
	
	/**
	 * Metoda informuje ile kart wymienil przeciwnik
	 * @param howMany liczba kart wymienionych
	 */
	public void opExchange(int howMany) {
		if(howMany == 0)
			stateLabel.setText("State: Skipped");
		else
			stateLabel.setText("State: Exchanged " + howMany);
	}
}
